﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace BanVeXemPhim_Presentation
{
    public partial class FormMHBanVe : Form
    {
        public FormMHBanVe()
        {
            InitializeComponent();
        }
        private PhimDTO PhimDangChon;
        private XuatChieuDTO XuatChieuDangChon;
        private FormMHChinh _manHinhChinh;
        public FormMHChinh ManHinhChinh
        {
            get { return _manHinhChinh; }
            set { _manHinhChinh = value; }
        }

        private void FormMHChinh_Load(object sender, EventArgs e)
        {            
            PhimDTO[] dsPhim = DanhSachPhimDangChieu();
            int n = dsPhim.Length;
            List<Bitmap> dsBm = new List<Bitmap>();
                for (int i = 0; i < n; i++)
                {
                    if(dsPhim[i].DataHinh!=null)
                    {
                        MemoryStream stream=new MemoryStream(dsPhim[i].DataHinh);
                        Bitmap bitmap=new Bitmap(stream);
                        dsBm.Add(bitmap);
                    }
                }
                if (dsBm!=null)
                {
                    userControlPhimHot1.ListHinhAnh = dsBm.ToArray();
                }

            userControlChonPhim1.DsPhim = dsPhim;
        }

        //hàm lấy dánh sách phim đang chiếu, có thể dựa vào ngày chiếu để lấy.
        public PhimDTO[] DanhSachPhimDangChieu()
        {
            PhimControl control=new PhimControl();
            PhimDTO[]  dsPhim=control.DanhSachPhimChieuTrongTuan();
            if(dsPhim.Length==0)
            {
                dsPhim = control.DanhSachPhimChieuTuanCuoiCung();
            }
            return dsPhim;
        }
        //Hàm xảy ra khi chọn phim.
        private void userControlChonPhim1_SuKienChonPhim(PhimDTO phim)
        {
            //Xử lý chuyển sang chọn lịch chiếu.
            PhimDangChon = phim;
            XuatChieuControl xuatChieuControl = new XuatChieuControl();
            this.userControlChonLichChieu1.DanhSachXuatChieu = xuatChieuControl.LayDanhSachXuatChieuTheoPhim(phim);
            this.userControlChonLichChieu1.CapNhatTenPhim(phim.TenPhim);
            ShowCuaSoUsercontrol(2);
        }
        public void ShowCuaSoUsercontrol(int IdCuaSo)
        {
            this.userControlChonPhim1.Visible = (IdCuaSo == 1);
            this.userControlChonLichChieu1.Visible = (IdCuaSo == 2);
            this.userControlChonGhe1.Visible = (IdCuaSo == 3);
            this.userControlDanhSachVeOnline1.Visible = (IdCuaSo == 4);
            if(IdCuaSo!=4)
                this.userControlQuyTrinhDatVe1.QuyTrinhHienTai=IdCuaSo;
        }
        //Xử lý sau khi chọn lịch chiếu phim.
        private void userControlChonLichChieu1_NextClickEvent(XuatChieuDTO xuatChieuDto)
        {
            //Xử lý chuyển tới chọn ghế.
            XuatChieuDangChon = xuatChieuDto;
            CapNhatCuaSoChonGhe();
            ShowCuaSoUsercontrol(3);
        }
        
        public void CapNhatCuaSoChonGhe()
        {
            GheControl gheControl = new GheControl();
            this.userControlChonGhe1.CapNhatDanhSachGheTheoRapChieu(gheControl.LayDanhSachGheDangSuDungTheoRap(XuatChieuDangChon.RapChieu));
            this.userControlChonGhe1.CapNhatThongTinXuatChieu(XuatChieuDangChon);
            this.userControlChonGhe1.CapNhatTinhTrangCacGheDaDat(gheControl.LayDanhSachGheDaDatTheoXuatChieu(XuatChieuDangChon));
            DoiTuongMuaControl doiTuongMuaControl = new DoiTuongMuaControl();
            this.userControlChonGhe1.CapNhatDanhSachDoiTuongMua(doiTuongMuaControl.DanhSachDoiTuong());
        }

        //Xử lý chọn lại phim.
        private void userControlChonLichChieu1_BackClickEvent()
        {
            ShowCuaSoUsercontrol(1);
        }

        //Xử lý chọn lại lịch chiếu phim.
        private void userControlChonGhe1_BackClickEvent()
        {
            ShowCuaSoUsercontrol(2);
        }

        //Xử lý bán vé.
        private void userControlChonGhe1_FinishClickEvent()
        {
            //lưu ghế đươc chọn xuống csdl
            GheDTO[] dsghe=this.userControlChonGhe1.DanhSachGheDuocChon();
            VeControl veControl=new VeControl();
            int n = dsghe.Length;
            VeDTO[] dsVe=new VeDTO[n];
            int idDoiTuong = this.userControlChonGhe1.LayIDDoiTuongMua();
            for (int i = 0; i < n;i++ )
            {
                dsVe[i]=new VeDTO();
                dsVe[i].Ghe = dsghe[i].IdGhe;
                dsVe[i].IdDoiTuongMua = idDoiTuong;
                dsVe[i].XuatChieu = XuatChieuDangChon.IdXuatChieu;                
            }
            veControl.BanVe(dsVe);

            //Tính tiền vé thông qua danh sách vé.
            MessageBox.Show("Bán vé thành công ! Tổng tiền là:");
            ShowCuaSoUsercontrol(1);
        }

        //Logout ra màn hình đăng nhập
        private void buttonLogout_Click(object sender, EventArgs e)
        {
            this._manHinhChinh.ShowMHDangNhap();
            this.Hide();
            this.Dispose();
        }

        //form xử lý danh sách vé đặt online.
        private void userControlChonLichChieu1_XuLyDatVeOnline(XuatChieuDTO xuatChieuDto)
        {
            ChiTietVeControl chiTietVeControl=new ChiTietVeControl();
            this.userControlDanhSachVeOnline1.DsChiTietVe = chiTietVeControl.DanhSachVeDatTruoc(xuatChieuDto);
            ShowCuaSoUsercontrol(4);
        }

        //Quay trở lại màn hình chọn lịch chiếu.
        private void userControlDanhSachVeOnline1_SuKienChonLaiLichChieu()
        {
            ShowCuaSoUsercontrol(2);
        }
        //Xử lý trả vé đặt online.
        private void userControlDanhSachVeOnline1_SuKiemXuatVe(int idve)
        {
            VeControl veControl=new VeControl();
            veControl.ThanhToanVe(idve);
        }
        //Xử lý  đặt vé trước
        private void userControlChonGhe1_DatVeTruocEvent()
        {
            GheDTO[] dsghe = this.userControlChonGhe1.DanhSachGheDuocChon();
            if(dsghe.Length==0)
            {
                MessageBox.Show("Bạn chưa chọn ghế!");
                return;
            }
            FormNhapThongTinKhachHang form = new FormNhapThongTinKhachHang();
            form.FormParent = this;
            form.Show();
        }

        public void XuLyThongTinKhachHang(bool result,KhachHangDTO khachHangDto)
        {
            if (result == false)
                return;
            else
            {
                GheDTO[] dsghe = this.userControlChonGhe1.DanhSachGheDuocChon();
                KhachHangControl khachHangControl=new KhachHangControl();
                khachHangControl.ThemKhachHang(khachHangDto);
                int idkh = khachHangControl.LayIdKhachHang(khachHangDto);
                khachHangDto.IdKhachHang = idkh;

                int n = dsghe.Length;
                VeDTO[] dsVe = new VeDTO[n];
                int idDoiTuong = this.userControlChonGhe1.LayIDDoiTuongMua();
                for (int i = 0; i < n; i++)
                {
                    dsVe[i] = new VeDTO();
                    dsVe[i].Ghe = dsghe[i].IdGhe;
                    dsVe[i].IdDoiTuongMua = idDoiTuong;
                    dsVe[i].XuatChieu = XuatChieuDangChon.IdXuatChieu;
                    dsVe[i].KhachHang = idkh;
                }
                VeControl veControl=new VeControl();
                veControl.DatVeTruoc(dsVe);

                CapNhatCuaSoChonGhe();
                MessageBox.Show("Đặt vé thành công");
            }
        }


        //huỷ vé đang chọn
        private void userControlDanhSachVeOnline1_SuKienHuyVeDangChon(ChiTietVeDTO chiTietVeDto)
        {
            VeControl veControl = new VeControl();
            veControl.HuyVe(chiTietVeDto.IdVe);
        }


        //Huỷ tất cả vé đặt trước.
        private void userControlDanhSachVeOnline1_SuKienHuyTatCaVeDatTruoc(int idxuatchieu)
        {
            VeControl veControl=new VeControl();
            veControl.HuyTatCaVeThuocXuatChieu(idxuatchieu);
        }

    }
}
